Many scenarios in computing realms are known to benefit from parallel processing. In general, such parallel processing may refer to the use of two or more otherwise-separate computational resources to execute a single task or computation, in a simultaneous or overlapping fashion. One example of such parallel processing may occur in the realm of database search/access, where two or more computational resources (e.g., two servers, processors, or cores) are used to execute a single query of a large database, in order to provide a query result more quickly than a single one of the computational resources would be able.
Another of many examples of realms which may benefit from parallel processing is cloud computing. Cloud computing refers generally to providing computing/processing capabilities as a utility, and to fulfilling computing needs of a user(s) on an as-needed basis, including increasing, decreasing, or otherwise changing the user's computational abilities in accordance with the user's demands (and, correspondingly, increasing, decreasing, or otherwise changing an associated cost of providing such computational abilities). For example, a user may use a generic, general-purpose computing device to access computational resources of a provider over a network, so that the provider may exercise control over the computational resources that are provided.
To implement such scenarios, the provider may deploy the necessary hardware and software that is deemed necessary to service the provider's customer base. That is, such a provider will have certain expectations or predictions about a number of users who will be accessing the providers' hardware/software resources, as well as expectations/predictions about the extent to which these users will consume resources (e.g., some users may require tasks which are far more data-intensive than other users). In order to be cost-effective, then, the provider will generally seek to optimize available resources, including using minimal resources necessary to meet current computing demands of the provider's customer base.
Parallel processing allows the provider in such a scenario to pursue such optimization by, e.g., allocating resources executing in parallel to a particular user and/or for a particular computational task. In this way, a particular user may obtain, for a desired period of time, the effect of accessing a large amount of computational resources (e.g., fast processing speeds), without having to incur all the costs associated with the actual purchase, installation, and management of associated hardware and software.
Implementation of such parallel processing, however, is difficult to accomplish in an efficient or optimal manner. For example, there may be overhead costs associated with splitting/assigning multiple tasks (of multiple users) to the multiple available processing resources, as well as costs associated with re-joining or merging the results of the task processing. Depending, e.g., on the nature of the tasks in question, and the extent of the parallelization, the utility of added processing resources may be reduced, and such overhead costs may limit, and may ultimately dominate or overwhelm, the benefits of the parallelization. Such scenarios in which a larger-than-optimal number or amount of processing resources are used may be referred to as over-parallelization. Conversely, the assignment of too few processing resources to a given task/user may occur and may be referred to asunder-parallelization, and may result in unnecessarily slow overall processing times, and a corresponding decrease in user satisfaction.
Further, complexity and unpredictability of a runtime environment of one or more running tasks may exacerbate the difficulties of multi-core parallel query processing. For example, even if an acceptable plan for parallel processing is formulated prior to runtime, it may occur that runtime events occur which reduce the efficacy or desirability of the planned parallelization. Thus, effective implementation of parallel processing is a difficult and non-trivial challenge, and sub-optimal implementation may limit an efficacy of computing resources and a productivity/satisfaction of users.